Some serial bus protocols require that each device attached to the bus be identified by a unique address. The industry-standard Inter-Integrated Circuit (“I2C”) bus is an example of such a bus. Devices on the I2C bus can be operated as either a master device or a slave device. A master device generates the clock signal and controls data transfers between master and slave devices. A master device addresses a slave device by transferring over the bus a number of bits (typically a byte) of information that includes an n-bit slave device bus address and a direction bit to indicate a read or write operation. The bus address of a particular slave device is often determined when the device is manufactured. That is, the bits of the slave device bus address are fixed (or “hard-wired”) in the slave device. If two or more identical slave devices that share the same address are connected to the bus, the slave devices cannot be accessed individually by the master device. Therefore, each slave device coupled to the bus is required to have its own unique bus address for proper bus operation.
One mechanism for assigning unique addresses allows bits to be set by the user through the use of DIP switches or jumper block connectors. Another way to differentiate between identical slave devices on a serial bus is to use a chip select or enable, which requires the allocation of at least one extra pin on the slave device and therefore increases the cost and complexity of that device. The user (e.g., a module or system designer) could also employ a multiplexer to select multiple devices with the same bus address, a solution that would add to the overall cost and board space requirements of the system.